package Volume1.ch5;

import java.lang.reflect.Method;

/**
 * 测试通过反射调用方法——invoke函数的使用
 * @Auther jacob
 * @Date 2020/8/7 23:07
 */
public class MethodTableTest {


    /**
     * 计算一个数的平方
     * @param x a number
     * @return 返回该数的平方
     */
    public static double square(double x){
        return x * x;
    }

    /**
     * 打印计算结果
     * @param from
     * @param to
     * @param n
     * @param f 被调用的方法名
     */
    public static void printTable(double from, double to, int n, Method f){
        // 输出该方法作为表头
        System.out.println(f);

        double dx = (to - from) / (n - 1);

        for (double x = from; x <= to; x += dx) {
            try {
                double y = (Double)f.invoke(null, x);
                System.out.printf("%10.4f | %10.4f\n", x, y);
            } catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws NoSuchMethodException {
        Method square = MethodTableTest.class.getMethod("square", double.class);

        printTable(1, 10, 10, square);
    }
}
